iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0

前言

前幾天的內容,我們已經學會如何從頭創建一個新的應用程式,不過還有很多功能沒有,如果有要新增或變更的欄位,那要怎麼辦呢?
我們不需碰觸原有的程式碼,利用繼承的方式,在原先程式上做到添加功能,這就是odoo厲害的地方。
那繼承能幫我們做到哪些事:

  • 變更現有或自訂model中存在的某些欄位屬性(ex:使欄位唯讀、不可見)
  • 新增/修改/刪除現有/自訂model中的舊欄位或新欄位
  • 在現有/自訂model中新增按鈕

那要擴充哪些功能呢?

  • 書本:
    1.管理書本目前狀況(可不可以租借)。
    2.ISBN碼驗證支援10位數的格式。
    3.在web頁面(圖書清單)判斷此書可否借,並只顯示可借書籍。

  • 會員:
    1.儲存使用者姓名、聯絡資訊。
    2.提供聊天跟互動功能。

準備項目

在library_app旁建立一個新目錄ibrary_member,並添加兩個檔案-一個空的__init__.py和一個包含以下內容的__manifest__.py:

{
    "name": "Library Members",
    "description": "Manage members borrowing books.",
    "author": "Daniel Reis",
    "license": "AGPL-3",
    "depends": ["library_app", "mail"],
    "application": False,
}

管理書本目前狀況

新增是否可用的欄位
在library_member/init.py

from . import models
from . import controllers

在library_member/models/init.py

from . import library_book
from . import library_member

先在library_member/models/library_book.py使用_inherit 來宣告要擴展的model

from odoo import fields, models

class Book(models.Model):
    _inherit = "library.book"
    is_available = fields.Boolean("Is Available?")

再到view新增是否可用的欄位
到library_member/views/book_view.xml

<odoo>
  <record id="view_form_book_extend" model="ir.ui.view">
    <field name="name">Book: add Is Available? field</field>
    <field name="model">library.book</field>
    <field name="inherit_id" ref="library_app.view_form_book"/>
    <field name="arch" type="xml">

      <field name="isbn" position="after">
        <field name="is_available" />
      </field>
      <!-- Or, using xpath:
      <xpath expr="//field[@name='isbn']" position="after">
        <field name="is_available" />
      </xpath>
      -->

    </field>
  </record>
</odoo>

這樣運行odoo就能看到。


上一篇
[Day11] 圖書館管理系統 表單跟web測試
下一篇
[Day13]結合odoo已有功能來擴充應用程式
系列文
Odoo 魔法學院: 一步一腳印帶你成為客製化大師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言